package sparkml_study

import org.apache.spark.sql.SparkSession
import org.apache.spark.ml.linalg.{Vector,Vectors}
import org.apache.spark.ml.stat.Summarizer
import org.apache.spark.ml.stat.Summarizer._


object summarizer_HuiZonTongJi {
  def main(args: Array[String]): Unit = {

    /*
        在 Apache Spark MLlib 中，summarizer 主要用于 统计计算，特别是针对 数据摘要 和 统计量（例如均值、方差等）的
        计算。它并不像自然语言处理中的 summarizer 用于生成文本摘要的功能那样处理文本数据，而是专注于 数值数据 或 向量数
        据 的统计汇总。
     */




    val spark=SparkSession.builder()
      .master("local[*]")
      .appName("汇总统计")
      .getOrCreate()


    import spark.implicits._

    //  创建实验数据,最后面那个小数代表的是权重
    val data=Seq(
      (Vectors.dense(1.0,2.0,4.0),1.0),
      (Vectors.dense(4.0,3.0,6.0),3.0)
    )

    //  转化为dataframe
    val df=data.toDF("features","weight")

    //  计算得到数据的加权平均值和加权方差
    val (meanVal,varianceVal)=df.select(
      metrics("mean","variance").summary($"features",$"weight").as("summary")
    )
      .select(
        "summary.mean","summary.variance"
      ).as[(Vector,Vector)].first()


    //  计算得到数据无权重下的平均值和方差
    val (meanVal2,varianceVal2)=df
      .select(mean($"features"),variance($"features")).as[(Vector,Vector)].first()









    spark.close()
  }

}
